package com.soft.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.soft.entity.Worklog;
import com.soft.mapper.WorklogMapper;
import com.soft.service.WorklogService;

/**
 * 工作日志服务实现：基于 MyBatis-Plus 的简单实现。
 */
@Service
public class WorklogServiceImpl implements WorklogService {
    @Autowired
    private WorklogMapper worklogMapper;

        /** 新增日志 */
        @Override
    public boolean saveWorklog(Worklog worklog) {
    // 新增：返回是否插入成功（>0）
        return worklogMapper.insert(worklog) > 0;
    }

        /** 更新日志（按ID） */
        @Override
    public boolean updateWorklog(Worklog worklog) {
    // 更新：按主键覆盖非 null 字段（由上层合并控制）
        return worklogMapper.updateById(worklog) > 0;
    }

        /** 删除日志（按ID） */
        @Override
    public boolean deleteWorklog(Integer worklogId) {
    // 物理删除：简单直删，若需审计可改为软删
        return worklogMapper.deleteById(worklogId) > 0;
    }

        /** 获取单条日志 */
        @Override
    public Worklog getWorklogById(Integer worklogId) {
    // 主键查询：用于详情/更新前读取
        return worklogMapper.selectById(worklogId);
    }

        /** 列出全部日志（无过滤） */
        @Override
    public List<Worklog> listWorklogs() {
    // 全量列表：开发/演示用途，生产建议分页
        return worklogMapper.selectList(null);
    }

        /** 按创建人/团队过滤列表，按创建时间倒序 */
        @Override
    public List<Worklog> listWorklogsBy(Integer creatorId, Integer teamId) {
        QueryWrapper<Worklog> qw = new QueryWrapper<>();
        if (creatorId != null) {
            qw.eq("creator_id", creatorId);
        }
        if (teamId != null) {
            qw.eq("related_team_id", teamId);
        }
    // 最近创建的在前，便于时间线展示
    qw.orderByDesc("create_time");
        return worklogMapper.selectList(qw);
    }

            /** 统计（用于分页） */
            @Override
      public long countWorklogs(Integer creatorId, Integer teamId) {
          QueryWrapper<Worklog> qw = new QueryWrapper<>();
          if (creatorId != null) {
              qw.eq("creator_id", creatorId);
          }
          if (teamId != null) {
              qw.eq("related_team_id", teamId);
          }
          // 仅统计总数用于分页
          return worklogMapper.selectCount(qw);
      }

            /** 分页查询：limit offset 模式 */
            @Override
      public List<Worklog> listWorklogsPage(Integer creatorId, Integer teamId, int page, int size) {
          int p = Math.max(1, page);
          int s = Math.max(1, Math.min(size, 200));
          int offset = (p - 1) * s;
          QueryWrapper<Worklog> qw = new QueryWrapper<>();
          if (creatorId != null) {
              qw.eq("creator_id", creatorId);
          }
          if (teamId != null) {
              qw.eq("related_team_id", teamId);
          }
          // 通过 last 拼接 LIMIT，返回当前页数据
          qw.orderByDesc("create_time").last("limit " + offset + "," + s);
          return worklogMapper.selectList(qw);
      }
}
